from flask import Flask, request, render_template, json, session, redirect, flash
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

app.config.from_pyfile("config.py")

db = SQLAlchemy(app)

# 作业1：
# 更新我们的博客系统-v2.0
# 更新如下：
# 创建数据表 User（用户名，密码，年龄），数据表Blog(标题，作者，内容)
# 要求用户名与标题唯一，id自增 密码、作者不能为空，年龄、内容可以为空
class User(db.Model):
    __tablename__ = "user"

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)

    username = db.Column(db.String(50), unique=True, nullable=False)

    password = db.Column(db.String(150), nullable=True)

    age = db.Column(db.Integer, nullable=False)


class Blog(db.Model):
    __tablename__ = "blog"

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)

    title = db.Column(db.String(50), unique=True, nullable=False)

    author = db.Column(db.String(150), nullable=True)

    content = db.Column(db.Integer, nullable=False)


@app.route("/init")
def init():
    db.create_all()
    return "数据库创建成功"

# 向blog数据表中添加数据


# 1、注册功能：把注册用户存入到 User表中
@app.route("/login", methods=["GET", "POST"])
def login():
    if request.method == "POST":
        name = request.form.get("username")
        passwordd = request.form.get("password")
        agess = request.form.get("age")
        username2 = User(username=name, password=passwordd, age=agess)
        if User.query.filter(User.username == name, User.password == passwordd).all():
            flash("用户名已存在，请重新注册")
            return render_template("login.html")
        db.session.add(username2)
        db.session.commit()
        flash("恭喜您，注0册成功,您的信息已自动录入数据库系统，下次可直接前往登录页面进行登录。。。。。。")
        return redirect("/reg")
    return render_template("login.html")

# 2、登录功能：从数据库中查找 用户名、密码是否存在 存在 跳转到 首页 ，不存在 则在登录页提示用户名或密码错误
token = ""

@app.route("/reg", methods=["GET", "POST"])
def reg():
    global token
    if request.method == "POST":
        regname = request.form.get("username")
        regpassword = request.form.get("password")
        username = regname
        if User.query.filter(User.username == regname, User.password == regpassword).all():
            session["username"] = regname
            token = "123456"
            flash("登录成功")
            return redirect("/home")
        flash("用户名或密码错误,请重新输入。。。。。")
        return render_template("reg.html")
    return render_template("reg.html")

# 3、首页功能：展示从数据库中查询到的所有博客列表
@app.route("/home", methods=["GET", "POST"])
def home():
    if token == "123456":
        username = session.get("username")
        delete = "删除"
        update = "修改"
        blog_list = Blog.query.all()
        return render_template("home.html", username=username, blog_list=blog_list, delete=delete, update=update)
    return redirect("/reg")

# 4、添加博客功能： 把博客写入到Blog表中，并跳转到首页 ,注意：先判断是否登录、如果登录则继续工作、如果没有登录 则跳转到登录页。提示 通过session验证是否登录
@app.route("/add", methods=["GET", "POST"])
def add():
    if request.method == "POST":
        title = request.form.get("title")
        author = request.form.get("author")
        content = request.form.get("content")
        sum = Blog(title=title, author=author, content=content)
        db.session.add(sum)
        db.session.commit()
        flash("该信息也添加到博客列表，已跳转首页，请查询。。。。。。")
        return redirect("/home")
    return render_template("add.html")

# 5、博客列表提供 修改连接、删除连接
# 6、点击修改连接，进入修改页，完成修改后，提交，提示：修改页一定要先回显 博客信息
@app.route("/update/<int:id>", methods=["GET", "POST"])
def update(id):
    ret = Blog.query.get(id)
    if request.method == "GET":
        title = ret.title
        author = ret.author
        content = ret.content
        return render_template("update.html", title=title, author=author, content=content)
    if request.method == "POST":
        ret.title = request.form.get("title")
        ret.author = request.form.get("author")
        ret.content = request.form.get("content")
        db.session.commit()
        flash("修改成功，已自动跳转到首页。。。。。。")
        return redirect("/home")

# 7、点击删除连接，直接删除，跳转到首页，实现首页博客列表的更新
@app.route("/delete/<int:id>")
def delete(id):
    ret = Blog.query.get(id)
    db.session.delete(ret)
    db.session.commit()
    flash("删除成功，已自动跳转到首页。。。。。")
    return redirect("/home")


if __name__ == '__main__':
    app.run()
